s="aabb"
#判断是否是回文的函数
def isH(s):
    sLen=len(s)
    if sLen<=1:
        return True
    l_pointer,r_pointer=0,sLen-1
    while l_pointer<=r_pointer:
        if s[l_pointer]!=s[r_pointer]:
            return False
        l_pointer+=1
        r_pointer-=1
    return True

#深度优先遍历
def dfs(s,index,sLen,path,res):
    if index==sLen:
        res.append(path[:])
        return None
    for i in range(0,sLen-index):
        print("i:",i)
        #因为截取字符串是消耗性能的，因此，采用传子串小标的方式来判断一个子串是否是回文串
        if index+i+1<=sLen:
            if not isH(s[index:index+i+1]):
                print(s[index:index+i+1],"不是回文，该部分结束")
                #如果不是回文，就直接进行下一次循环
                continue
            # print(s[index:i+1+index])
            path.append(s[index:i+index+1])
            dfs(s,index+i+1,sLen,path,res)
            path.pop()
def partition(s):
    sLen=len(s)
    res=[]
    if sLen==0:
        return res
    #用来记录路径的
    path=[]
    dfs(s,0,sLen,path,res)
    print(res)
partition(s)





